
//节流 第一次请求马上触发，往后不管你怎么触发，我只在2s后请求,2s内触发我要重新计算时间的
// 节流：第一次立即执行，后续在间隔时间内只执行最后一次调用
export const connect_throttle2 = function (fn, interval) {
    let lastTime = 0;
    let timer = null;
    
    return function(...args) {
        const now = Date.now();
        const remaining = interval - (now - lastTime);

        if (remaining <= 0) {
            // 首次或超过间隔时间立即执行
            if (timer) clearTimeout(timer);
            fn.apply(this, args);
            lastTime = now;
        } else {
            // 后续调用重置计时器
            if (timer) clearTimeout(timer);
            timer = setTimeout(() => {
                fn.apply(this, args);
                lastTime = Date.now();
            }, remaining);
        }
    };
}

//节流 第一次立即执行，后续在间隔时间内不执行
export const connect_throttle = function (fn, interval) {
    let lastTime = 0;
    let timer = null;
    
    return function(...args) {
        const now = Date.now();
        const elapsed = now - lastTime;

        // 首次执行或超过间隔时间
        if (!lastTime || elapsed >= interval) {
            // 清除可能存在的解锁定时器
            if (timer) {
                clearTimeout(timer);
                timer = null;
            }
            
            // 立即执行并记录时间
            fn.apply(this, args);
            lastTime = now;
            
            // 设置解锁定时器
            timer = setTimeout(() => {
                lastTime = 0; // 重置状态
                timer = null;
            }, interval);
        }
    };
}

//防抖 不管你怎么点击，我只在2s后触发事件，2s内点击我也要等到2s后再触发事件
export const connect_debounce = function (fn, delay) {


    let timer = null;
    return function() {
        if (timer) clearTimeout(timer);
        timer = setTimeout(fn, delay);
    };
}
